home *** CD-ROM | disk | FTP | other *** search
/ Aminet 22 / Aminet 22 (1997)(GTI - Schatztruhe)[!][Dec 1997].iso / Aminet / dev / basic / ZClipBoard.lha / Clipboard.asc next >
Text File  |  1997-10-13  |  3KB  |  155 lines

  1. ;
  2. ; Using the Amiga's Clipboard.device with Blitz2
  3. ;
  4. ;  by Benoit Socias -- bsocias@ulb.ac.be
  5. ;
  6. ;   Feel free to copy this code into your program
  7. ;
  8. ;
  9. ; ClipOpen{} : call it to open the Clipboard ^_^;;
  10. ;    (automatically called by ClipRead and ClipWrite)
  11. ;
  12. ; ClipClose{}: call it to close the Clipboard
  13. ;    (automatically called by ClipRead and ClipWrite)
  14. ;
  15. ; ClipWrite{s.s} : writes string s to Clipboard
  16. ;
  17. ; s.s=ClipRead{} : reads Clipboatd into string s
  18. ;
  19.  
  20.  
  21. ; accessing exec level devices
  22. ;
  23. ; provides two things :
  24. ;  ClipWrite{s.s} puts an IFF string in the clipboard
  25. ; =ClipRead.s{} reads an IFF string from the clipboard
  26. ;
  27. NEWTYPE.Node:*ln_Succ.Node:*ln_Pred:ln_Type.b:ln_Pri:*ln_Name.b:End NEWTYPE
  28.  
  29. NEWTYPE.List:*lh_Head.Node:*lh_Tail:*lh_TailPred:lh_Type.b:l_pad:End NEWTYPE
  30.  
  31. NEWTYPE.MsgPort
  32.   mp_Node.Node
  33.   mp_Flags.b
  34.   mp_SigBit.b
  35.   *mp_SigTask.w
  36.   mp_MsgList.List
  37. End NEWTYPE
  38.  
  39. NEWTYPE.Message
  40.   mn_Node.Node
  41.   *mn_ReplyPort.MsgPort
  42.   mn_Length.w
  43. End NEWTYPE
  44. NEWTYPE.ClipboardUnitPartial
  45.   cu_Node.Node
  46.   cu_UnitNum.l
  47. End NEWTYPE
  48.  
  49. NEWTYPE.IOStdReq
  50.   io_Message.Message
  51.   *io_Device.b           ;Device
  52. ;  *io_Unit.ClipboardUnitPartial
  53.   *io_Unit.b
  54.   io_Command.w
  55.   io_Flags.b
  56.   io_Error.b
  57.   io_Actual.l
  58.   io_Length.l
  59.   *io_Data.b
  60.   io_Offset.l
  61. ;add particulars to device here
  62.   io_ClipID.l
  63. End NEWTYPE
  64.  
  65.   #_INVALID=0:#_RESET=1:#_READ=2:#_WRITE=3:#_UPDATE=4
  66.   #_CLEAR=5:#_STOP=6:#_START=7:#_FLUSH=8:#_NONSTD= 9
  67.  
  68. ;
  69. ;initialise messageport and iorequest for talking to device
  70. ;
  71.  
  72. DEFTYPE .IOStdReq clipio
  73. DEFTYPE .MsgPort clipport
  74. clipsig.l=0
  75.  
  76. .ClipOpen
  77. Statement ClipOpen{}
  78.   SHARED clipio,clipport,clipsig
  79.  
  80.   clipport\mp_Node\ln_Type=4
  81.   clipport\mp_MsgList\lh_Head=&clipport\mp_MsgList\lh_Tail
  82.   clipport\mp_MsgList\lh_TailPred=&clipport\mp_MsgList\lh_Head
  83.  
  84.   clipio\io_Message\mn_Node\ln_Type=5
  85.   clipio\io_Message\mn_ReplyPort=&clipport
  86.   clipio\io_Message\mn_Length=SizeOf.IOStdReq
  87.  
  88.   d.s="clipboard.device"
  89.  
  90.   If OpenDevice_(d,0,clipio,0)<>0 Then End
  91.  
  92.   clipsig.l=AllocSignal_(-1):If clipsig<0 Then End
  93.   clipport\mp_SigBit=clipsig
  94.   clipport\mp_SigTask=FindTask_(0)
  95. End Statement
  96.  
  97. .ClipClose
  98. Statement ClipClose{}
  99.   SHARED clipio,clipsig
  100.  
  101.   CloseDevice_ clipio
  102.   FreeSignal_ clipsig
  103. End Statement
  104.  
  105. .ClipWrite
  106. Statement ClipWrite{s.s}
  107.   SHARED clipio
  108.  
  109.   ClipOpen{}
  110.   sodd.s=s
  111.   If Len(s) MOD 2 Then sodd+Chr$(0)
  112.   a.s="FORM"+Mkl$(12+Len(sodd))+"FTXTCHRS"+Mkl$(Len(s))+sodd
  113.   USEPATH clipio
  114.   \io_Command=#_WRITE
  115.   \io_Data=&a
  116.   \io_Length=Len(a)
  117.   \io_ClipID=0
  118.   \io_Offset=0
  119.   \io_Error=0
  120.   SendIO_ clipio
  121.  
  122.   \io_Command=#_UPDATE
  123.   SendIO_ clipio
  124.   ClipClose{}
  125. End Statement
  126.  
  127. .f_ClipRead
  128. Function.s ClipRead{}
  129.   SHARED clipio
  130.   s.s=SPACE$(4096)
  131.  
  132.   ClipOpen{}
  133.   USEPATH clipio
  134.   \io_Command=#_READ
  135.   \io_Data=&s
  136.   \io_Length=4096
  137.   \io_ClipID=0
  138.   \io_Offset=0
  139.   SendIO_ clipio
  140.   r.s=Left$(s,\io_Actual)
  141.   \io_Offset=10000
  142.   SendIO_ clipio
  143.   If(Left$(r,4)="FORM")
  144.     If(Mid$(r,9,8)="FTXTCHRS")
  145.       r=Mid$(r,21,Cvl(Mid$(r,17,4)))
  146.     Else
  147.       r=""
  148.     EndIf
  149.   EndIf
  150.   ClipClose{}
  151.   Function Return r
  152. End Function
  153.  
  154.  
  155.